import axios from 'axios' //引入axios
import config from '../config'

//这里新建一个变量baseUrl，并在下面进行暴露
const baseUrl = process.env.NooE_ENV === 'development' ? config.baseUrl.dev : config.baseUrl.pro

class HttpRequest {
    constructor(baseUrl) {
        this.baseUrl = baseUrl  //这里是变量baseUrl初始化（即将变量添加到实例中this.baseUrl这个属性上）
    }

    getInsideConfig() { //添加一个方法getInsideConfig,定义axios的相关配置
        const config = {
            //定一个配置的初始值baseUrl(这个baseUrl是config/index.js里的)
            baseUrl: this.baseUrl,   //拿到当前实例下的baseUrl（就是上面初始化的变量baseUrl，因为=this.baseUrl所以这里用this.baseUrl表示)
            header: {}
        }
        return config
    }

    interceptors(instance) {
        // 添加请求拦截器
        instance.interceptors.request.use(function (config) {
            // 在发送请求之前做些什么
            return config;
        }, function (error) {
            // 对请求错误做些什么
            return Promise.reject(error);
        });

        // 添加响应拦截器
        instance.interceptors.response.use(function (response) {
            // 对响应数据做点什么
            return response;
        }, function (error) {
            // 对响应错误做点什么
            return Promise.reject(error);
        });
    }
    request (options) {   //设参数options
        const instance = axios.create() //对axios用create()方法进行实例的创建，来拿到instance
        //这里是传入的相关参数，且需要拿到当前配置好的相关信息getInsideConfig，即调用相关信息getInsideConfig
        options = {...this.getInsideConfig, ...options }  //拿当前对象this.getInsideConfig并进行解构....,同时将传入进来的参数options进行解构
        this.interceptors()  //调用拦截器，将创建的实例instance传入
        return instance(options)  //调用完成，返回接口请求的结果(在实例instance里传入options数据)
    }
}

export default new HttpRequest(baseUrl)